/**
 * Início da execução após
 */
$jq(document).ready(function() {
	adicionarElementosTela();
	adicionarListenersCampos();
	configurarEstadoInicialCampos();
});

var linkNovoEscopoValidacao = "<td><a href='' id='addEscopoValidacao' class='botao_especial'>Novo Escopo Validação<a><td>";
var textoEscopoValidacao = "FUNCIONALIDADE: \n\nPERFIL DE ACESSO: \n\nDESCRIÇÃO: \n------------------------------";
var linkNovoEscopoVerificacao = "<td><a href='' id='addEscopoVerificacao' class='botao_especial'>Novo Escopo Verificação<a><td>";
var textoEscopoVerificacao = "ARTEFATO: \n\nVERSÃO: \n\nDESCRIÇÃO: \n------------------------------";



function adicionarElementosTela() {
	$jq(seletorTextoEscopoValidacao).closest("td").append(
			linkNovoEscopoValidacao);

	$jq(seletorTextoEscopoVerificacao).closest("td").append(
			linkNovoEscopoVerificacao);
}

function adicionarListenersCampos() {

	// Tratamento Combo Serviço.
	$jq(seletorComboServico).on("change", function() {

		esconderCampos();
		
		if ($jq(this).val() == SELECIONE) {
			
			limparCamposRelato();
			configurarEstadoInicialCampos();
			return;
			
		} else if ($jq(this).val() == CONFIGURACAO_DEPLOY) {
			$jq(seletorApresentarCamposDeploy).mostrarLinhaTabelaCampo();
		} else if ($jq(this).val() == CONFIGURACAO_DEPLOY_TESTE) {
			$jq(seletorApresentarCamposDeployTeste).mostrarLinhaTabelaCampo();
		} else if ($jq(this).val() == CONFIGURACAO_DEPLOY_TESTE_NAO_FUNCIONAL) {
			$jq(seletorApresentarCamposDeployTesteNaoFuncional).mostrarLinhaTabelaCampo();
		} else if ($jq(this).val() == TESTE_VERIFICACAO) {
			$jq(seletorApresentarCamposTesteVerificacao).mostrarLinhaTabelaCampo();
		} else {
			$jq(seletorApresentarCamposGeral).mostrarLinhaTabelaCampo();
		} 
		
		configurarCamposPorServico($jq(this).val());
		verificarOutrosCamposSelecionadosPreenchidos();

	}).trigger("change");

	
	// Tratamento Radio Arquitetura.
	$jq(seletorRadioArquitetura).on("change", function() {
		if ($jq(this).val() == "Outra") {
			$jq(seletorTextoInformarOutraArquitetura).mostrarLinhaTabelaCampo().habilitar();
		} else {
			$jq(seletorTextoInformarOutraArquitetura).val("").esconderLinhaTabelaCampo();
		}
	});

	// Tratamento Checkboxes Ambiente.
	$jq(seletorCheckboxesAmbiente).on("click", function() {
		if ($jq(this).is(":checked")) {
			if ($jq(this).val() == "Homologação") {
				$jq(seletorTextoEnderecoURLHomologacao).closest("tr").show();
			} else if ($jq(this).val() == "Produção") {
				$jq(seletorTextoEnderecoURLProducao).mostrarLinhaTabelaCampo();
			} else if ($jq(this).val() == "Desenvolvimento") {
				$jq(seletorTextoEnderecoURLDesenvolvimento).mostrarLinhaTabelaCampo();
			}
		} else {
			if ($jq(this).val() == "Homologação") {
				$jq(seletorTextoEnderecoURLHomologacao).val("").esconderLinhaTabelaCampo();
			} else if ($jq(this).val() == "Produção") {
				$jq(seletorTextoEnderecoURLProducao).val("").esconderLinhaTabelaCampo();
			} else if ($jq(this).val() == "Desenvolvimento") {
				$jq(seletorTextoEnderecoURLDesenvolvimento).val("").esconderLinhaTabelaCampo();
			}
		}

	});


	// Tratamento links de Escopo Validação/Verificação e Arquivos de Deploy.
	$jq("#addEscopoValidacao, #addEscopoVerificacao").on("click", function(evt) {
		evt.preventDefault();
		evt.stopPropagation();

		if ($jq(this).attr("id") == "addEscopoVerificacao") {
			$jq(seletorTextoEscopoVerificacao).val(($jq(seletorTextoEscopoVerificacao).val() != ""
				? $jq(seletorTextoEscopoVerificacao).val() + "\n" + textoEscopoVerificacao
						: textoEscopoVerificacao));
		} else if ($jq(this).attr("id") == "addEscopoValidacao") {
			$jq(seletorTextoEscopoValidacao).val(($jq(seletorTextoEscopoValidacao).val() != ""
				? $jq(seletorTextoEscopoValidacao).val() + "\n" + textoEscopoValidacao
						: textoEscopoValidacao));
		}
	});

}

function esconderCampos() {
	$jq(seletorTodosCamposSolicitacao).esconderLinhaTabelaCampo();
}

// Executado quando o Serviço voltar para o Selecione
function limparCamposRelato() {
	$jq(seletorCamposTextoSolicitacao).val("");
	$jq(seletorCamposSelecaoMarcacaoSolicitacao).desmarcar();
}

/**
 * Trata os campos preenchidos pelo solicitante para que eles sejam
 * mantidos quando for realizada a troca de Serviço.
 */
function verificarOutrosCamposSelecionadosPreenchidos() {

	if ($jq(seletorCheckboxesAmbiente).eq(0).is(":checked")) {
		$jq(seletorTextoEnderecoURLDesenvolvimento).mostrarLinhaTabelaCampo();
	} else {
		$jq(seletorTextoEnderecoURLDesenvolvimento).val("").esconderLinhaTabelaCampo();
	}

	if ($jq(seletorCheckboxesAmbiente).eq(1).is(":checked")) {
		$jq(seletorTextoEnderecoURLHomologacao).mostrarLinhaTabelaCampo();
	} else {
		$jq(seletorTextoEnderecoURLHomologacao).val("").esconderLinhaTabelaCampo();
	}

	if ($jq(seletorCheckboxesAmbiente).eq(2).is(":checked")) {
		$jq(seletorTextoEnderecoURLProducao).mostrarLinhaTabelaCampo();
	} else {
		$jq(seletorTextoEnderecoURLProducao).val("").esconderLinhaTabelaCampo();
	}



	if ($jq(seletorRadioArquitetura).eq(3).is(":checked")) {
		$jq(seletorTextoInformarOutraArquitetura).mostrarLinhaTabelaCampo();
	} else {
		$jq(seletorTextoInformarOutraArquitetura).val("").esconderLinhaTabelaCampo();
	}

}


/**
 * Configura os campos para o estado inicial de cada um quando da abertura da tela de solicitação.
 * Esses estados são alterados de acordo com o preenchimento dos campos na tela.
 */
function configurarEstadoInicialCampos() {

	// Desabilita os campos Sistema e Tipo da Demanda
	$jq(seletorTextoSistema + ", " + seletorTextoTipoDemanda).desabilitar();
	
	// Esconder os campos: Projeto StarTeam, Nome da View, Baseline Source e Arquivos para Deploy
	$jq(seletorTextoProjetoStarTeam + separador +
			seletorTextoNomeView + separador +
			seletorTextoBaselineSource + separador +
			seletorTextoArquivosDeploy).hide();
	
	
}


/**
 * Configura o estado em que os campos devem estar em cada serviço.
 * 
 * @param servico
 */
function configurarCamposPorServico(servico) {

	// Erros sempre atribuídos - CGCQ_Configuração.

	switch (parseInt(servico)) {
		case CONFIGURACAO_DEPLOY_TESTE: {
	
			$jq(seletorCheckboxesAmbiente).marcarComIndice(1);
			break;
		}
		case CONFIGURACAO_DEPLOY: {
	
			if ($jq(seletorCheckboxesAmbiente).eq(1).is(":checked") && $jq(seletorTextoEnderecoURLHomologacao).val().trim() == "") {
				$jq(seletorCheckboxesAmbiente).desmarcarComIndice(1);
				$jq(seletorTextoEnderecoURLHomologacao).esconderLinhaTabelaCampo();
			}
			break;
		}
		case CONFIGURACAO_DEPLOY_TESTE_NAO_FUNCIONAL: {
			
			$jq(seletorCheckboxesAmbiente).marcarComIndice(1);
			break;
		}
		case TESTE_VERIFICACAO: {

			break;
		}
	}
}
